from django.conf import settings
from django.core.files.storage import Storage
from django.utils.deconstruct import deconstructible
from fdfs_client.client import Fdfs_client
"""
自定义存储类的格式:
1, 定义类继承自Storage
2, 重写init方法,保证变量能够被初始化
3, 重写open,save,exists,url
"""

@deconstructible
class MyStorage(Storage):
    def __init__(self, base_url=None):
        if not base_url:
            base_url = settings.BASE_URL
        self.base_url = base_url

    def open(self, name, mode='rb'):
        """当去打开一张图片的时候会调用该方法"""
        pass

    def save(self, name, content, max_length=None):
        """當去存儲一張圖片時會調用該方法"""
        """
              :param name: 图片名字
              :param content: 图片内容
              :param max_length: 最大的上传量
              :return:
        """
        # 創建對象
        client = Fdfs_client('utils/fdfs/client.conf')

        # 上傳
        result = client.upload_by_buffer(content.read())

        # 判斷圖片是否上傳成功
        if result["Status"] == "Upload successed.":
            return result["Remote file_id"]
        else:
            raise Exception("圖片上傳失敗")

    def exists(self, name):
        """存儲的時候判斷圖片是否存在"""
        return False

    def url(self, name):
        """當訪問圖片時返回圖片地址"""
        return self.base_url + name

